package com.scs.application.modules.order.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;

/**
 * @Description: 采购订单
 */
@Data
@NoArgsConstructor
@Valid
@Accessors(chain = true)
public class OrderDTO {

    private String id;

    @NotBlank(message = "采购订单数据来源不能为空")
    private String sourceKey;

    @NotBlank(message = "采购订单号不能为空")
    private String poCode;

    /**
     * 待确定通过何种方式实现数据统一标识
     **/
    @NotBlank(message = "供应商标识不能为空")
    private String supplierKey;


    @NotBlank(message = "供应商名称不能为空")
    private String supplierName;

    @NotBlank(message = "收货地点标识不能为空")
    private String warehouseKey;
    /**
     * 收货地点标识
     **/

    @NotBlank(message = "收货地点不能为空")
    private String warehouseName;

    /**
     * 是否寄售
     **/
    @NotBlank(message = "是否寄售不能为空")
    private String isConsignment;

    /** 是否一物一码。0：否，1：是 */
    @NotBlank(message = "一物一码不能为空")
    private String isOneThingOneYard;

    private Date gmtRequireLatestDelivery;

    @NotNull(message = "订单总金额不能为空")
    private Double totalAmount;

    private String buyerName;

    @NotNull(message = "审核时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date gmtAudited;

    @Length(max=50, message="跟台包名称长度必须介于 0 和 100 之间")
    private String packageName;

    @NotNull(message = "订单明细不能为空")
    @Size(min = 1,message = "订单明细至少有一条明细")
    private List<OrderItemDTO> items;

    /** 备注 */
    @Length(max=200, message="备注长度必须介于 0 和 100 之间")
    private String remark;

    /** 需求科室Id */
    private String demandDeptId;

    /** 需求科室Name */
    private String demandDeptName;

    /** 采购科室Id */
    private String purchaseDeptId;

    /** 采购科室Name */
    private String purchaseDeptName;

    /** 采购日期 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date purchaseDate;

    /** 第三方采购平台供应商Id */
    private String thirdSupplierId;

    /** 第三方采购平台科室Id */
    private String thirdDeptId;

    /** 第三方订单Id */
    private String thirdOrderId;

    /**1：药品，2：耗材，3：试剂, 4:跟台包 默认耗材 **/
    private Integer materialTypeCode;

    // 明细记录数量
    private int countDtl;

    @Data
    public static class OrderItemDTO {

        private String id;

        /** 商品规格ID */
        @NotBlank(message="商品规格ID不能为空")
        private String materialSpecId;

        /** 商品编码 */
        @NotBlank(message = "商品编码不能为空")
        private String materialCode;

        /** 商品代码 */
        private String materialErpCode;

        /** 商品名称 */
        @Length(max=100, message="商品名称长度必须介于 0 和 100 之间")
        private String materialName;

        /** 商品通用名 */
        @Length(max=100, message="商品通用名长度必须介于 0 和 100 之间")
        private String materialTradeName;

        /** 规格 */
        @NotBlank(message="规格不能为空")
        @Length(min=1, max=100, message="规格长度必须介于 1 和 100 之间")
        private String materialSpec;

        /** 厂商名称 */
        @NotBlank(message="厂商名称不能为空")
        @Length(min=0, max=100, message="厂商名称长度必须介于 1 和 100 之间")
        private String manufacturerName;

        /** 剂型 */
        @Length(max=50, message="剂型长度必须介于 0 和 50 之间")
        private String form;

        /** 价格 */
        @NotNull(message="价格不能为空")
        private Double price;

        /** 小计(元) */
        @NotNull(message="小计(元)不能为空")
        private Double subtotalAmount;

        /** 已发货数量 */
        private Double deliveredQty;

        /** 已发货金额(元) */
        private Double deliveredAmount;

        /** 发货状态 */
        private Integer deliveryStatus;

        /** 数量 */
        @NotNull(message="数量不能为空")
        private Double qty;

        /** 单位 */
        @NotBlank(message="单位不能为空")
        @Length(min=1, max=4, message="单位长度必须介于 1 和 4 之间")
        private String unit;

        /** 订单单位 */
        @NotBlank(message = "订单单位不能为空")
        private String orderUnit;

        /** 订单单位数量 */
        @NotNull(message = "订单单位数量不能为空")
        private Double orderQty;

        /** 注册证号 */
        private String certificateNo;

        /** 备注 */
        @Length(max=200, message="备注长度必须介于 0 和 100 之间")
        private String remark;

        @NotBlank(message = "采购订单数据来源不能为空")
        private String sourceKey;

        /** 中标号 */
        private String bidNo;

        /** 阳采代码 */
        private String sunPurchaseCode;

        /** 阳采代码规格Id */
        private String sunPurchaseSpecId;

        /** 第三方订单Id */
        private String thirdOrderItemId;

        /**
         * 医用耗材编码
         */
        private String medicalConsumablesCode;
    }
}
